package org.xx.armory.swing.components;

import static org.apache.commons.lang3.StringUtils.trimToEmpty;
import static org.xx.armory.commons.Validators.greaterThanOrEqual;
import static org.xx.armory.commons.Validators.notBlank;
import static org.xx.armory.commons.Validators.notNull;

/**
 * 指定了类型的表格列。
 */
public class TypedTableColumn {
    private final String name;
    private final String title;
    private final TypedTableColumnType type;
    private final int size;

    /**
     * 构造表格列。
     *
     * @param name
     *         列名。
     * @param title
     *         列标题。
     * @param type
     *         列类型。
     * @param size
     *         列的显示尺寸。
     * @throws IllegalArgumentException
     *         如果参数{@code name}是{@code null}或者只包含空白字符，或者参数{@code type}是{@code null}，或者参数{@code size}小于0。
     */
    public TypedTableColumn(
            String name,
            String title,
            TypedTableColumnType type,
            int size
    ) {
        this.name = notBlank(name, "name").trim();
        this.title = trimToEmpty(title);
        this.type = notNull(type, "type");
        this.size = greaterThanOrEqual(size, "size", 0);
    }

    /**
     * 获取列名。
     *
     * @return 列名。
     */
    public final String getName() {
        return this.name;
    }

    /**
     * 获取列标题。
     *
     * @return 列标题。
     */
    public final String getTitle() {
        return this.title;
    }

    /**
     * 获取列类型。
     *
     * @return 列类型。
     */
    public final TypedTableColumnType getType() {
        return this.type;
    }

    /**
     * 获取列的显示尺寸。
     *
     * @return 列的显示尺寸。
     */
    public final int getSize() {
        return this.size;
    }
}
